package mx.ipn.escom.redes.gestionarhardware.controller;

import java.util.List;

import javax.servlet.http.HttpServletRequest;

import mx.ipn.escom.redes.equipo.model.CategoriaHardware;
import mx.ipn.escom.redes.equipo.model.Hardware;
import mx.ipn.escom.redes.gestionarcategoriahardware.business.CategoriaHardwareBs;
import mx.ipn.escom.redes.gestionarhardware.business.HardwareBs;
import mx.ipn.escom.redes.util.Constantes;

import org.apache.struts2.ServletActionContext;
import org.apache.struts2.convention.annotation.Namespace;
import org.apache.struts2.convention.annotation.Result;
import org.apache.struts2.convention.annotation.Results;

import com.opensymphony.xwork2.ActionSupport;
import com.opensymphony.xwork2.ModelDriven;

@Results({ @Result(name = "equipo", type = "redirectAction", params = {
		"actionName", "gestionar-equipo/new", "namespace", "/equipo" }) })
@Namespace("/hardware")
public class GestionarHardwareCtrl extends ActionSupport implements
		ModelDriven<Hardware> {

	/**
	 * 
	 */
	private static final long serialVersionUID = 1L;

	private Integer idSel;

	private Hardware model;

	private HardwareBs hardwareBs;

	private CategoriaHardwareBs categoriaHardwareBs;

	private String nombre;

	private List<Hardware> listHardware;

	private List<CategoriaHardware> listCategoriaHardware;

	public String index() {
		// Equipo equipo = (Equipo)
		// SessionManager.get(NombreObjetosSession.EQUIPO);
		listHardware = hardwareBs.findAll();
		if (listHardware == null || listHardware.isEmpty()) {
			addActionMessage(getText("SIN_REGISTROS_HARDWARE"));
		}
		return "index";
	}

	public String editNew() {
		listCategoriaHardware = categoriaHardwareBs.findAll();
		if (listCategoriaHardware == null || listCategoriaHardware.isEmpty()) {
			addActionMessage(getText("SIN_REGISTROS_CATEGORIA_HARDWARE"));
		}
		HttpServletRequest request = ServletActionContext.getRequest();
		String isCreatingEquipo = request.getParameter("isCreatingEquipo");
		if (isCreatingEquipo != null)
			Constantes.isCreatingEquipo = Boolean
					.parseBoolean(isCreatingEquipo);
		else
			Constantes.isCreatingEquipo = false;
		return "editNew";
	}

	public String create() {
		if (!hardwareBs.validarNombre(model.getMarca())) {
			addActionMessage(getText("HARDWARE_REPETIDO"));
		} else {
			hardwareBs.guardar(model);
			addActionMessage(getText("REGISTRO_HARDWARE_EXITOSO"));
		}
		if (Constantes.isCreatingEquipo)
			return "equipo";
		else
			return index();
	}

	public String edit() {
		listCategoriaHardware = categoriaHardwareBs.findAll();
		if (listCategoriaHardware == null || listCategoriaHardware.isEmpty()) {
			addActionMessage(getText("SIN_REGISTROS_CATEGORIA_HARDWARE"));
		}
		return "edit";
	}

	public String update() {
		if (!model.getNombre().equals(getNombre())) {
			if (!hardwareBs.validarNombre(model.getNombre())) {
				addActionMessage(getText("HARDWARE_REPETIDO"));
			} else {
				hardwareBs.modificar(model);
				addActionMessage(getText("MODIFICACION_HARDWARE_EXITOSA"));
			}
		} else {
			hardwareBs.modificar(model);
			addActionMessage(getText("MODIFICACION_HARDWARE_EXITOSA"));
		}

		return index();
	}

	public String deleteConfirm() {
		return "deleteConfirm";
	}

	public String destroy() {
		hardwareBs.eliminar(model);
		addActionMessage(getText("ELIMINACION_HARDWARE_EXITOSA"));
		return index();
	}

	/**
	 * @return the idSel
	 */
	public Integer getIdSel() {
		return idSel;
	}

	/**
	 * @param idSel
	 *            the idSel to set
	 */
	public void setIdSel(Integer idSel) {
		this.idSel = idSel;
		if (this.idSel != null) {
			model = hardwareBs.findById(idSel);
		}
		if (model.getNombre() != null) {
			setNombre(model.getNombre());
		} else {
			setNombre("");
		}
	}

	/**
	 * @return the model
	 */
	public Hardware getModel() {
		if (model == null) {
			model = new Hardware();
		}
		return model;
	}

	/**
	 * @param model
	 *            the model to set
	 */
	public void setModel(Hardware model) {
		this.model = model;
	}

	/**
	 * @return the hardwareBs
	 */
	public HardwareBs getHardwareBs() {
		return hardwareBs;
	}

	/**
	 * @param hardwareBs
	 *            the hardwareBs to set
	 */
	public void setHardwareBs(HardwareBs hardwareBs) {
		this.hardwareBs = hardwareBs;
	}

	/**
	 * @return the nombre
	 */
	public String getNombre() {
		return nombre;
	}

	/**
	 * @param nombre
	 *            the nombre to set
	 */
	public void setNombre(String nombre) {
		this.nombre = nombre;
	}

	/**
	 * @return the listHardware
	 */
	public List<Hardware> getListHardware() {
		return listHardware;
	}

	/**
	 * @param listHardware
	 *            the listHardware to set
	 */
	public void setListHardware(List<Hardware> listHardware) {
		this.listHardware = listHardware;
	}

	/**
	 * @return the listCategoriaHardware
	 */
	public List<CategoriaHardware> getListCategoriaHardware() {
		return listCategoriaHardware;
	}

	/**
	 * @param listCategoriaHardware
	 *            the listCategoriaHardware to set
	 */
	public void setListCategoriaHardware(
			List<CategoriaHardware> listCategoriaHardware) {
		this.listCategoriaHardware = listCategoriaHardware;
	}

	/**
	 * @return the categoriaHardwareBs
	 */
	public CategoriaHardwareBs getCategoriaHardwareBs() {
		return categoriaHardwareBs;
	}

	/**
	 * @param categoriaHardwareBs
	 *            the categoriaHardwareBs to set
	 */
	public void setCategoriaHardwareBs(CategoriaHardwareBs categoriaHardwareBs) {
		this.categoriaHardwareBs = categoriaHardwareBs;
	}

}
